'******************************************
'*********Cool Commands VBScript Plugin****
'Description: A replacement for Stealth's custom commands. With more variables and more options.
'  Originally written by Kirby for Stealthbot, This was converted over to FooLOps
'    (pretty easily), and sections were rewritten for the FooLOps command processor
'    and to greatly improve efficiency(trust me, it was 10x worse before I modded it).

'Coming Soon to a Script Near You:
'Flag support!!!
'More variables
'More variations

'Commands:(also cmdadd, cmddel, cclist aliases)
'.cooladd <Access> <Name> <Stuff>
'.coollist
'.coolrem <Name>
'.coolCommands <on/off/status>

'Variables:
'%1 - %100 - Arguments ( and working %rest)
'%t - Bot's trigger
'%0 - Username of the person that used it
'#R = Red color
'#G = Green color
'#Y = Yellow color
'#B = Blue color
'#W = White color
'#E = Grey color
'%B = Bot's Username 
'%c = Bot's channel
'%a = Access
'&& = New Line
'%f = Flags -XX Doesn't work, though can easily be added
'Notes:
'IT WILL MAKE "INPUT PAST END OF FILE" once installed. To fix this, type /initcool from within the bot.

'> Rainbow: %{Text to become multicolored}%
'> AlTeRnAtInG CaPs: %[Text to be AlTeRnAtEd]%
'> E x p a n d : %(Text to be e x p a n d e d)%
'> AlternateColors: #[Text to be alternated colors.]#
'>> The text to be ________ can be variables!
'> %rest


Const ScriptVer="CoolCommands V1.2 by Kirby, Ported and Modified for FooLOps by The-FooL"
enabled=true
Dim UsersInChannel
Dim FileSystem
dim MyTrigger
dim MyUserName
dim MyChannel
Const ForRead = 1, ForWrite = 2, ForAppend = 8


Sub Event_Load()
	ssc.AddChat vbYellow, "[COOL] Note: If you constantly see Input past end of file, then type /initcool to remedy the problem"
	ssc.AddChat vbYellow, "[COOL] Created by Kirby of Stealthbot.net"
	MyTrigger=ssc.getTrigger()
End Sub



'************
'//Bot has logged onto Battle.net  SCGateway is the
'    SCGateway - "useast", "uswest", "asia", etc
'    WCGateway - "Azeroth", "Northrend", etc.
'    Both of the above are passed regardless of product
'****************
Sub Event_LoggedOn(Username, Product, SCGateway, WCGateway)
MyUserName=Username
End Sub


Sub Event_Usertalk(Username, Flags, Message, Ping)

End Sub


Function Event_UserJoins(Username, Flags, ParsedStatString, OrigStatString, Product, Clan, Ping, Access, safeListed, GreetUser)
	UsersInChannel = UsersInChannel & Chr(0) & Username 
End Function


Sub Event_ServerInfo(Message) 


End Sub


Sub Event_ServerError(Message)

End Sub



Sub Event_UserEmote(Username, Flags, Message)

End Sub


Sub Event_WhisperFromUser(Username, Flags, Message)

End Sub


Sub Event_WhisperToUser(Username, Flags, Message)

End Sub


Sub Event_UserLeaves(Username, Flags)
	Dim UserBuffer, Buffer
	UserBuffer = Split(UsersInChannel, Chr(0))
	UsersInChannel = ""
	For Each Buffer In UserBuffer
	If Buffer <> UserName And Buffer <> "" Then UsersInChannel = UsersInChannel & Chr(0) & Buffer 
	Next
End Sub

Sub Event_FlagUpdate(Username, NewFlags, Ping, Message)

End Sub

Sub Event_UserInChannel(Username, Flags, Message, Ping, Product, OrigStatString)
	UsersInChannel = UsersInChannel & Chr(0) & Username
End Sub

Sub Event_ChannelJoin(ChannelName) ' Bot joins a different Channel
	UsersInChannel = ""
	MyChannel=ChannelName
End Sub


Sub scTimer_Timer() ' fires when the timer goes off

'//Timer Settings can be modifed with the added ScriptTimer Object
'//ScriptTimer.Enabled=True, ScriptTimer.Interval=1000, etc


End Sub



Function Event_PressedEnter(Message)
	If LCase(Message) = "/initcool" Then

	End if

End Function


Function Event_ParseCommand(Command, Rest, Username, Access, Inbot)
Select case command
	case "scriptver"
	   if access<20 then exit function
	   event_parsecommand =ScriptVer
        case "aboutscript"
	If access<50 then exit function
	   Event_ParseCommand="CooLCommands: Allows Advanced Custom Commands via VBScripting."
	Case "cooladd","addcmd","cmdadd"
	if not enabled then exit function
	If access<70 then exit function
		Event_ParseCommand=CC_Add(Split(Rest, " ", 4)(0), "", Split(Rest, " ", 4)(1), Split(Rest, " ", 3)(2))
	Case "coollist","cclist","cmdlist"
	if not enabled then exit function
	If access<70 then exit function
		CC_List(Not inbot)
		Event_ParseCommand=" "
	Case "coolrem","cooldel","cmddel","remcmd"
	if not enabled then exit function
	If access<70 then exit function
		Event_ParseCommand= CC_Rem(Rest)
	case "initcool"
	if access<80 then exit function
	Set FileSystem = CreateObject("Scripting.FileSystemObject")
	Set CCFile = FileSystem.OpenTextfile("coolcms.dat", 2, True,  0)
	CCFile.Write "9999" & Chr(0) & Chr(0) & Chr(5) & Chr(20) & Chr(4) & Chr(0) & "yo watcha looking at?" & vbCrLf
	Event_ParseCommand= "Cool command file has been initilized. Any existing commands were written over."
	case "cool","cc","coolcommands"
	if access<100 then exit function
	select case rest
		case "on"
		enabled=true
		event_parsecommand="CoolCommands Enabled"
		case "off"
		enabled=false
		event_parsecommand="CoolCommands Disabled"
		case "status"
		event_parsecommand="CoolCommands Disabled"
		If enabled then event_parsecommand="CoolCommands Enabled"
	end select
	case else
	if not enabled then exit function
		StrTmp=CC_Run(Username, Command, rest,Access)
		if strtmp<>"" then Event_ParseCommand=StrTmp

End select


End Function

'///When The Script File is Unloaded(Bot Close)
Sub Event_Close()
	
End Sub



'//////////////////Cool Functions
Function Alt2Between(Message, Left, Right)
For i = 1 to Len(Message)
 i1 = Mid(Message, i, 1)
  If Mid(Message, i, Len(Left)) = Left Then j = True
  If Mid(Message, i, Len(Right)) = Right Then j = False
  If j = True And Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     Then
  If i >= 2 Then
   If Mid(Message, i-1, Len(Right)) <> Left _
      And Mid(Message, i-1, Len(Right)) <> Right Then
    Select Case Int(i / 2)
     Case i/2
      i1 = Chr(193) & "S" & i1
     Case Else
      i1 = Chr(193) & "R" & i1
    End Select
   End If
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     Alt2Between = Alt2Between & i1
  Else
    Select Case Int(i / 2)
     Case i/2
      i1 = Chr(193) & "S" & i1
     Case Else
      i1 = Chr(193) & "R" & i1
    End Select
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     Alt2Between = Alt2Between & i1
  End If
  Else
    If i = 1 Then
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     Alt2Between = Alt2Between & i1 
    Else
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     Alt2Between = Alt2Between & i1
    End If
  End If
Next
End Function
Function IIIf(Expression, TruePart, FalsePart)
If Eval(Expression) = True Then IIIf = TruePart Else IIIf = FalsePart
End Function
Function ExpandBetween(Message, Left, Right)
For i = 1 to Len(Message)
 i1 = Mid(Message, i, 1)
  If Mid(Message, i, Len(Left)) = Left Then j = True
  If Mid(Message, i, Len(Right)) = Right Then j = False
  If j = True And Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     Then
  If i >= 2 Then
   If Mid(Message, i-1, Len(Right)) <> Left _
      And Mid(Message, i-1, Len(Right)) <> Right Then
     i1 = i1
   End If
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     ExpandBetween = ExpandBetween & i1 & " "
  Else
     i1 = i1
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     ExpandBetween = ExpandBetween & i1 & " "
  End If
  Else
    If i = 1 Then
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     ExpandBetween = ExpandBetween & i1
    Else
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     ExpandBetween = ExpandBetween & i1
    End If
  End If
Next
End Function


Function CC_Run(Username, Command, Message, UserAccess)

Dim CC, CCLine, Access, Flags, Name, Stuff, Args
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set CCFile = FileSystem.OpenTextfile("coolcms.dat", ForRead, True,  0)
CC = Split(CCFile.ReadAll, vbCrLf)
Dim i, j

For Each CCLine In CC
  On Error Resume Next
 CCALine = Split(CCLine & Chr(0) & Chr(0) & Chr(0) & Chr(0) & Chr(0), Chr(0))
 Access = Eval(CCALine(0))

 Flags = CCALine(1)
 Name = CCALine(2)
 Stuff = CCALine(3)

 If Command = LCase(Name) Then

If UserAccess < Access Then Exit Function 'dont bother to do anything if they dont have enough access
   For i=1 to 100
	If InStr(Stuff, "%" & i) > 0 Then 
		tempStr=Split(Message," ")(0)
		ssc.addchat i & tempStr & "-" & message
		Stuff = Replace(Stuff, "%" & i,tempStr )
		Message=Mid(Message,Len(tempStr)+2)
	Else
		Exit For
	End if
  Next

   Stuff = Replace(Stuff, "%rest", Message)
   Stuff = Replace(Stuff, "%r", Split(UsersInChannel, Chr(0))(Int(RND * UBound(Split(UsersInChannel, Chr(0))))))
   Stuff = Replace(Stuff, "%t", MyTrigger)
   Stuff = Replace(Stuff, "%0", Username)
   Stuff = Replace(Stuff, "%T", MyTrigger)
   Stuff = Replace(Stuff, "%u", MyUsername)
   Stuff = Replace(Stuff, "%U", MyUsername)
   Stuff = Replace(Stuff, "%c", MyChannel)
   Stuff = Replace(Stuff, "%C", MyChannel)
   Stuff = Replace(Stuff, "%B", MyUsername)
   Stuff = Replace(Stuff, "#R", Chr(193) & "Y")
   Stuff = Replace(Stuff, "#r", Chr(193) & "Y")
   Stuff = Replace(Stuff, "#G", Chr(193) & "R")
   Stuff = Replace(Stuff, "#g", Chr(193) & "R")
   Stuff = Replace(Stuff, "#B", Chr(193) & "U")
   Stuff = Replace(Stuff, "#b", Chr(193) & "U")
   Stuff = Replace(Stuff, "#W", Chr(193) & "W")
   Stuff = Replace(Stuff, "#w", Chr(193) & "W")
   Stuff = Replace(Stuff, "#Y", Chr(193) & "S")
   Stuff = Replace(Stuff, "#y", Chr(193) & "S")
   Stuff = Replace(Stuff, "#E", Chr(193) & "Q")
   Stuff = Replace(Stuff, "#e", Chr(193) & "Q")
   Stuff = Alt2Between(Stuff, "#[", "]#")
   Stuff = ExpandBetween(Stuff, "%(", ")%")
   Stuff = AlteBetween(Stuff, "%[", "]%")
   Stuff = RainBetween(Stuff, "%{", "}%")
   Stuff = Replace(Stuff, "%f", UserFlags)
   Stuff = Replace(Stuff, "%F", UserFlags)
   Stuff = Replace(Stuff, "%A", UserAccess)
   Stuff = Replace(Stuff, "%a", UserAccess)

   
	'Security Check for bans, etc
	Stuff = Replace(Stuff, "/b", "b") 'bans, etc
	Stuff = Replace(Stuff, "/k", "k") 'kciks, etc
	Stuff = Replace(Stuff, "/d", "d") 'designate
	Stuff = Replace(Stuff, "/r", "r") 'rejoin, etc
	Stuff = Replace(Stuff, "/u", "u") 'unban, unsquelch
	Stuff = Replace(Stuff, "/s", "s") 'squelch
	Stuff = Replace(Stuff, "/i", "i") 'ignore
	
	Stuff = Replace(Stuff, "&&", vbCrLf)
	CC_Run=Stuff
	Exit Function
  Exit For
 End If
Next
End Function
Function RainBetween(Message, Left, Right)
For i = 1 to Len(Message)
 i1 = Mid(Message, i, 1)
  If Mid(Message, i, Len(Left)) = Left Then j = True
  If Mid(Message, i, Len(Right)) = Right Then j = False
  If j = True And Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     Then
  If i >= 2 Then
   If Mid(Message, i-1, Len(Right)) <> Left _
      And Mid(Message, i-1, Len(Right)) <> Right Then
    Select Case Int(Rnd*6)
     Case 0
      i1 = Chr(193) & "Y" & i1
     Case 1
      i1 = Chr(193) & "Q" & i1
     Case 2
      i1 = Chr(193) & "W" & i1
     Case 3
      i1 = Chr(193) & "S" & i1
     Case 4
      i1 = Chr(193) & "U" & i1
     Case 5
      i1 = Chr(193) & "R" & i1
    End Select
   End If
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     RainBetween = RainBetween & i1
  Else
    Select Case Int(Rnd*6)
     Case 0
      i1 = Chr(193) & "Y" & i1
     Case 1
      i1 = Chr(193) & "Q" & i1
     Case 2
      i1 = Chr(193) & "W" & i1
     Case 3
      i1 = Chr(193) & "S" & i1
     Case 4
      i1 = Chr(193) & "U" & i1
     Case 5
      i1 = Chr(193) & "R" & i1
    End Select
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     RainBetween = RainBetween & i1
  End If
  Else
    If i = 1 Then
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     RainBetween = RainBetween & i1    
    Else
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     RainBetween = RainBetween & i1
    End If
  End If
Next
End Function
Function AlteBetween(Message, Left, Right)
For i = 1 to Len(Message)
 i1 = Mid(Message, i, 1)
  If Mid(Message, i, Len(Left)) = Left Then j = True
  If Mid(Message, i, Len(Right)) = Right Then j = False
  If j = True And Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     Then
  If i >= 2 Then
   If Mid(Message, i-1, Len(Right)) <> Left _
      And Mid(Message, i-1, Len(Right)) <> Right Then
    Select Case Int(i / 2)
     Case i/2
      i1 = LCase(i1)
     Case Else
      i1 = UCase(i1)
    End Select
   End If
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     AlteBetween = AlteBetween & i1
  Else
    Select Case Int(i / 2)
     Case i/2
      i1 = UCase(i1)
     Case Else
      i1 = LCase(i1)
    End Select
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     AlteBetween = AlteBetween & i1
  End If
  Else
    If i = 1 Then
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right Then _
     AlteBetween = AlteBetween & i1 
    Else
    If Mid(Message, i, Len(Left)) <> Left _
     And Mid(Message, i, Len(Right)) <> Right _
     And Mid(Message, i-1, Len(Right)) <> Left _
     And Mid(Message, i-1, Len(Right)) <> Right Then _
     AlteBetween = AlteBetween & i1
    End If
  End If
Next
End Function

Function CC_Rem(Name)
Dim CCFile, CC, CustomC, CCBuffer
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set CCFile = FileSystem.OpenTextfile("coolcms.dat", ForRead, True,  0)
CC = Split(CCFile.ReadAll, vbCrLf)
For Each CustomC In CC
 If LCase(Split(CustomC & Chr(0) & Chr(0) & Chr(0) & Chr(0), Chr(0))(2)) <> LCase(Name) Then _
  CCBuffer = CCBuffer & CustomC & vbCrLf Else _
  CC_Rem = "Cool command [" & Name & "] removed."
Next
CCFile.Close
Set CCFile = FileSystem.OpenTextfile("coolcms.dat", ForWrite, True,  0)
CCBuffer = Replace(CCBuffer, vbCrLf & vbCrLf, vbCrLf)
CCFile.Write CCBuffer
CCFile.Close
If CC_Rem = "" Then CC_Rem = "There is no Cool command by that name."
End Function

Function CC_List(Say)
Dim CC, CCList, CCBuffer, i, Buffer
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set CCFile = FileSystem.OpenTextfile("coolcms.dat", ForRead, True,  0)
CC = CCFile.ReadAll
CCList = Split(CC, vbCrLf)
For Each CC In CCList
 If CCBuffer <> vbNullString Then CCBuffer = CCBuffer & ";" & Split(CC & String(5, Chr(0)), Chr(0))(2) & " [" & Split(CC & String(5, Chr(0)), Chr(0))(0) & "]" Else CCBuffer = Split(CC & String(5, Chr(0)), Chr(0))(2) & " [" & Split(CC & String(5, Chr(0)), Chr(0))(0) & "]"
Next
CCBuffer = Split(CCBuffer, ";", 2)(1)
CCBuffer = Left(CCBuffer, Len(CCBuffer) - 4)
If Say = True Then
 While CCBuffer <> ""
  Buffer = vbNullString
  Buffa = Split(CCBuffer, ";", 6)
   If UBound(Buffa) = 5 Then
    Buffer = Buffa(0) & ";" & Buffa(1) & ";" & Buffa(2) & ";" & Buffa(3) & ";" & Buffa(4)
    ssc.addq Buffer & " [more]"
     CCBuffer = Buffa(5)
   Else
    For i=0 to UBound(Buffa)
     Buffer = Buffer & Buffa(i) & ";"
    Next

    ssc.addq Buffer & ""
    CCBuffer = ""
  End If
 WEnd
Else
 ssc.AddChat vbYellow, CCBuffer
End If
End Function

Function CC_Add(Access, Flags, Name, Stuff)

Dim CCFile
Set FileSystem = CreateObject("Scripting.FileSystemObject")
Set CCFile = FileSystem.OpenTextfile("coolcms.dat", 8, True,  0)
CCFile.WriteLine(Int(Access) & Chr(0) & Flags & Chr(0) & Name & Chr(0) & Stuff)
CC_Add = "Cool Command [" & Name & "] added."
End Function